libCEF总结02字符串 |
您所在的位置:网站首页 › std wstring › libCEF总结02字符串 |
libCEF 的 CefString、cef_string_t 在 Windows 下均表示一个 16 位的 Unicode 字符串,它们的使用请参考下面的代码 {//wchar_t* ==> CefString const wchar_t* pUTF16 = L"字符串\0(UTF-16)"; CefString s(pUTF16); //\0 处会被截断, 内部调用 FromWString s = pUTF16; //\0 处会被截断, 内部调用 FromWString CefString s1(std::wstring(pUTF16,12)); //\0 处不会被截断,内部调用 FromWString s.FromWString(std::wstring(pUTF16,12)); //\0 处不会被截断 s.FromString(pUTF16,12,true); //\0 处不会被截断,这个效率应该是最高的(不会产生 std::wstring 临时对象) } {//CefString ==> wchar_t* CefString s(L"字符串"); const wchar_t*pUTF16 = NULL; pUTF16 = s.ToWString().c_str(); //s.ToWString() 返回的是 std::wstring 对象 pUTF16 = ((std::wstring)s).c_str(); //(std::wstring)s 会调用 ToWString 返回 std::wstring 对象 pUTF16 = (const wchar_t*)s.c_str(); //效率最高,但有可能返回 NULL } {//UTF-8 ==> CefString const wchar_t* pUTF16 = L"字符串\0(UTF-8)"; char pUTF8[256]; int nLen8 = WideCharToMultiByte(CP_UTF8,0,pUTF16,11,pUTF8,sizeof(pUTF8),NULL,NULL); pUTF8[nLen8] = '\0'; CefString s(pUTF8); //\0 处会被截断, 内部调用 FromString s = pUTF8; //\0 处会被截断, 内部调用 FromString CefString s1(std::string(pUTF8,nLen8)); //\0 处不会被截断,内部调用 FromString s.FromString(std::string(pUTF8,nLen8)); //\0 处不会被截断 } {//CefString ==> UTF-8 CefString s(L"字符串"); const char*pUTF8 = NULL; pUTF8 = s.ToString().c_str(); //s.ToString() 返回的是 std::string 对象 pUTF8 = ((std::string)s).c_str(); //(std::string)s 会调用 ToString 返回 std::string 对象 } {//CString ==> CefString CString s(_T("字符串")); CStringW sW((LPCTSTR)s,s.GetLength()); CefString sCS; sCS.FromString((const wchar_t*)sW,sW.GetLength(),true); } {//CefString ==> CString CefString sCS(L"字符串"); CString s((const wchar_t*)sCS.c_str(),sCS.length()); } {//cef_string_t 的使用 CefSettings settings; //settings.locale 就是一个 cef_string_t /**************************************************************************\ 下面的代码给 cef_string_t 变量赋值,即给 settings.locale 赋值 CefString 的成员变量 string_ 就是一个 cef_string_t* 创建 CefString 临时对象时,该对象的成员变量 string_ = &settings.locale 接着调用 CefString::operator= 函数,给 string_ 赋值 L"zh-CN"(其实是给 settings.locale 赋值) CefString 临时对象析构时,成员变量 owner_ 为 false,就不会释放 string_ 所指向的字符串了 最终 settings.locale 就是 L"zh-CN" \**************************************************************************/ CefString(&settings.locale) = L"zh-CN"; /**************************************************************************\ 根据 cef_string_t 变量获得 Unicode 字符串的首地址和字符数 \**************************************************************************/ const wchar_t* pStr = (const wchar_t*)settings.locale.str; //首地址,有可能为 NULL int nLen = settings.locale.length; //字符数 } |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |